
// 连接redis服务器

#include <iostream>
#include <hiredis/hiredis.h>

int main()
{
    struct timeval timeout = {
        .tv_sec = 1,      // 1秒
        .tv_usec = 500000 // 微秒
    };
    redisContext *ctx = redisConnectWithTimeout("localhost", 6379, timeout);
    if (ctx == NULL || ctx->err)
    {
        if (ctx)
        {
            std::cout << "连接失败:" << ctx->err << std::endl;
            redisFree(ctx); // 释放连接
        }
        else
        {
            std::cout<<"内存分配失败"<<std::endl;
        }
        return 1;
    }
    else
    {
        std::cout<<"连接redis成功"<<std::endl;
    }

    //使用redisCommand发送命令
    //返回redisReply存储整体响应结果
    redisReply* reply=(redisReply*)redisCommand(ctx,"set key_xg value_xg");
    if(reply==NULL)
    {
        std::cout<<"命令执行失败"<<std::endl;
        redisFree(ctx);
        return 2;
    }

    //处理响应(检查类型和结果)
    if(reply->type==REDIS_REPLY_STATUS)
    {
        std::cout<<"set 结果:"<<reply->str<<std::endl;//输出"ok"
    }

    //释放响应内存，必须手动释放，否则内存泄漏
    freeReplyObject(reply);

    //发送get命令
    reply=(redisReply*)redisCommand(ctx,"get key_xg");
    if(reply==NULL)
    {
        std::cout<<"命令执行失败"<<std::endl;
        redisFree(ctx);
        return 2;
    }

    if(reply->type==REDIS_REPLY_STRING)
    {
        std::cout<<"get 结果为:"<<reply->str<<std::endl;//输出"value_xg"
    }
    freeReplyObject(reply);
    //释放连接
    redisFree(ctx);
    return 0;
}